package com.xunlai.infra.permission.business.service;

import com.xunlai.infra.permission.business.vo.route.*;
import com.xunlai.infra.permission.common.exception.PermissionBusinessException;
import com.xunlai.infra.permission.common.vo.BasePageRespVo;

import java.util.List;


/**
 * @author liang
 * @date 8/2/23 5:22 PM
 * 线路service
 */
public interface RouteService {

    Long createRoute(RouteCreateReqVo reqVo);

    Boolean updateRoute(Long id,RouteCreateReqVo routeCreateReqVo);

    RouteDetailVo getRouteDetail(Long id);

    RouteContactDetailVo getRouteContactDetail(Long routeId,Long contactId,String posterNo);

    @Deprecated
    BasePageRespVo<RouteListVo> listRoute(RouteQueryVo routeQueryVo, Integer pageNum, Integer pageSize);

    BasePageRespVo<RouteListVo> listRoute(Long userId,RouteQueryVo routeQueryVo, Integer pageNum, Integer pageSize);

    Boolean onlineRoute(Long id) throws PermissionBusinessException;

    Boolean offlineRoute(Long id) throws PermissionBusinessException;

    Boolean deleteRoute(Long id) throws PermissionBusinessException;
    void deleteRoute(RouteBatchDeleteVo routeBatchDeleteVo) throws PermissionBusinessException;

    void bindPosterTemplate(RouteBindPosterVo routeBindPosterVo);

    Long createRouteType(RouteTypeCreateVo routeTypeCreateVo);

    BasePageRespVo<RouteTypeListVo> listRouteType(RouteTypeQueryVo routeTypeQueryVo,Integer pageNum,Integer pageSize);

    List<RouteTypeListVo> listAllRouteType();

    void updateRouteType(Long id, RouteTypeCreateVo routeTypeCreateVo);

    Long createRouteSubject(RouteSubjectCreateVo routeSubjectCreateVo);

    BasePageRespVo<RouteSubjectListVo> listRouteSubject(RouteSubjectQueryVo routeSubjectQueryVo,Integer pageNum,Integer pageSize);

    List<RouteSubjectListVo> listAllRouteSubject();

    void updateRouteSubject(Long id, RouteSubjectCreateVo routeSubjectCreateVo);

    Long createRouteTemplate(RouteTemplateCreateVo routeTemplateCreateVo);

    BasePageRespVo<RouteTemplateListVo> listRouteTemplate(RouteTemplateQueryVo routeTemplateQueryVo,Integer pageNum,Integer pageSize);
    BasePageRespVo<RouteTemplateListVo> listRouteTemplate(Long createUser,RouteTemplateQueryVo routeTemplateQueryVo,Integer pageNum,Integer pageSize);

    List<RouteTemplateListVo> listAllRouteTemplate();

    void updateRouteTemplate(Long id, RouteTemplateCreateVo routeTemplateCreateVo);


    List<String> listRouteDestination();

    Long transferRoute(RouteTransferVo routeTransferVo);

    Long batchTransferRoute(RouteBatchTransferVo routeBatchTransferVo);

    void viewRoute(Long routeId);

    MyRouteListVo myRouteList(Long userId,RouteQueryVo routeQueryVo,Long contactId,String posterNo,Integer pageNum,Integer pageSize);
}
